package alipay

import (
	"jlpay-sdk-go/pkg/jlpay/core"
	"jlpay-sdk-go/pkg/jlpay/models"
)

// ==================== 支付宝实名查询 ====================

// RealnameAliQueryRequest 支付宝实名查询请求
type RealnameAliQueryRequest struct {
	models.OrgBaseRequest
	// MerchNo 商户号
	MerchNo string `json:"merch_no,omitempty"`
	// QueryType 查询类型，0-申请单查询（默认），1-授权结果查询
	QueryType string `json:"query_type,omitempty"`
	// 原始请求映射数据
	rawRequestMap map[string]interface{} `json:"-"`
}

// NewRealnameAliQueryRequest 创建支付宝实名查询请求
func NewRealnameAliQueryRequest() *RealnameAliQueryRequest {
	req := &RealnameAliQueryRequest{
		QueryType: "0", // 默认查询类型
	}
	return req
}

// SetMerchNo 设置商户号
func (r *RealnameAliQueryRequest) SetMerchNo(merchNo string) *RealnameAliQueryRequest {
	r.MerchNo = merchNo
	return r
}

// SetQueryType 设置查询类型
func (r *RealnameAliQueryRequest) SetQueryType(queryType string) *RealnameAliQueryRequest {
	r.QueryType = queryType
	return r
}

// SetRawRequestMap 设置原始请求映射数据
func (r *RealnameAliQueryRequest) SetRawRequestMap(rawMap map[string]interface{}) *RealnameAliQueryRequest {
	r.rawRequestMap = rawMap
	return r
}

// GetRawMap 获取原始请求映射数据
func (r *RealnameAliQueryRequest) GetRawMap() (map[string]interface{}, bool) {
	return r.rawRequestMap, len(r.rawRequestMap) > 0
}

// ToMap 转换为map
func (r *RealnameAliQueryRequest) ToMap() (map[string]interface{}, error) {
	// 如果有原始请求数据，优先使用
	if rawMap, hasRaw := r.GetRawMap(); hasRaw {
		return rawMap, nil
	}

	// 先获取基类的map
	baseMap, err := r.OrgBaseRequest.ToMap()
	if err != nil {
		return nil, err
	}

	// 添加自己的字段
	if r.MerchNo != "" {
		baseMap["merch_no"] = r.MerchNo
	}
	if r.QueryType != "" {
		baseMap["query_type"] = r.QueryType
	}

	return baseMap, nil
}

// CheckRequiredParams 检查必需参数
func (r *RealnameAliQueryRequest) CheckRequiredParams(config *core.Config) error {
	// 与Python版本保持一致，不进行参数校验
	return nil
}

// RealnameAliQueryResponse 支付宝实名查询响应
type RealnameAliQueryResponse struct {
	models.StandardResponse
	// ApplymentStatus 申请状态
	ApplymentStatus string `json:"applyment_status,omitempty"`
	// QrcodeData 二维码数据
	QrcodeData string `json:"qrcode_data,omitempty"`
	// RejectParam 拒绝参数
	RejectParam string `json:"reject_param,omitempty"`
	// RejectReason 拒绝原因
	RejectReason string `json:"reject_reason,omitempty"`
	// AuthorizeState 授权状态
	AuthorizeState string `json:"authorize_state,omitempty"`
}

// NewRealnameAliQueryResponse 创建支付宝实名查询响应
func NewRealnameAliQueryResponse() *RealnameAliQueryResponse {
	return &RealnameAliQueryResponse{}
}
